package data.list;

import org.jdom.Element;

import data.Dataexception;
import data.item.Attribute;

/**
 * Die Liste fuer die Attribute (alle XML-Tags mit
 * attributes als tagnamen werden von dieser Liste verarbeitet)
 * 
 * @author daishy
 * @date 13.03.2008 11:43:49
 */
public class Attributeslist extends Datalist<Attribute>
{
	/**
	 * CTor. Gibt nur die ID an die Datenliste weiter
	 * (ID=>attributes)
	 */
	public Attributeslist()
	{
		super("attributes");
	}
	
	/**
	 * Die Methode verarbeitet den XML-Baum und wertet die Daten darin aus
	 * Fuer jedes Attribute-Element wird ein Attribute-Object erstellt.
	 * Falls doppelte IDs vorhanden sind, wird eine Exception geworfen
	 * 
	 * @param elem Das XML Element
	 * @throws Dataexception
	 */
	public void processXML(Element elem) throws Dataexception
	{
		if(elem == null)
			throw new IllegalArgumentException("no null values");
		
		if(elem.getName().compareToIgnoreCase("attributes") == 0)
		{
			for(Object child : elem.getChildren())
			{
				// Neues Attribut erstellen
				Attribute attr = new Attribute((Element)child);
				
				// pruefen ob die ID noch frei ist
				if(this.data.containsKey(attr.getID()))
					throw new Dataexception("Item with this ID already loaded");
			
				this.data.put(attr.getID(), attr);
			}			
		}
		else
			throw new Dataexception("Invalid tagname.");
	}

}
